// Copyright (C) 2006 Igor Zelmanovich <izwebfilemanager@gmail.com>
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

using System;
using System.Web;
using System.Web.UI;

namespace IZ.WebFileManager.Components
{
    internal abstract class FileViewRender
    {
        //protected SortMode sort;
        //protected SortDirection sortDirection;
        protected FileManagerController controller;
        protected FileView fileView;

        protected FileViewRender(FileView fileView)
        {
            this.fileView = fileView;
            controller = fileView.Controller;
            //this.sort = fileView.Sort;
            //this.sortDirection = fileView.SortDirection;
        }


        internal virtual void RenderBeginList(HtmlTextWriter output)
        {
        }

        internal virtual void RenderEndList(HtmlTextWriter output)
        {
        }

        internal virtual void RenderBeginGroup(HtmlTextWriter output, GroupInfo group)
        {
            output.AddStyleAttribute("clear", "both");
            output.AddStyleAttribute(HtmlTextWriterStyle.Width, "100%");
            output.RenderBeginTag(HtmlTextWriterTag.Div);
            output.Write(HttpUtility.HtmlEncode(group.Name));
            output.RenderEndTag();
        }

        internal virtual void RenderEndGroup(HtmlTextWriter output, GroupInfo group)
        {
        }

        //internal virtual void RenderUpDirectory(HtmlTextWriter output, System.IO.DirectoryInfo dir)
        //{
        //}
        internal virtual void RenderItem(HtmlTextWriter output, FileViewItem item)
        {
        }

        internal static FileViewRender GetRender(FileView fileView)
        {
            switch (fileView.View)
            {
                case FileViewRenderMode.Details:
                    return new FileViewDetailsRender(fileView);
                case FileViewRenderMode.Icons:
                    return new FileViewIconsRender(fileView);
                case FileViewRenderMode.Thumbnails:
                    if (fileView.Controller.SupportThumbnails)
                        return new FileViewThumbnailsRender(fileView);
                    return new FileViewIconsRender(fileView);
                default:
                    return new FileViewDetailsRender(fileView);
            }
        }

        protected void RenderItemName(HtmlTextWriter output, FileViewItem item)
        {
            if (fileView.UseLinkToOpenItem)
            {
                string href = item.IsDirectory
                                  ? "javascript:WFM_" + fileView.Controller.ClientID + ".OnExecuteCommand(WFM_" +
                                    fileView.ClientID + ",\'0:0\')"
                                  : (VirtualPathUtility.AppendTrailingSlash(fileView.CurrentDirectory.VirtualPath) +
                                     item.FileSystemInfo.Name);
                if (!item.IsDirectory && !String.IsNullOrEmpty(fileView.LinkToOpenItemTarget))
                    output.AddAttribute(HtmlTextWriterAttribute.Target, fileView.LinkToOpenItemTarget);
                output.AddAttribute(HtmlTextWriterAttribute.Href, href, true);
                output.AddAttribute(HtmlTextWriterAttribute.Class, fileView.LinkToOpenItemClass);
                output.RenderBeginTag(HtmlTextWriterTag.A);
                output.Write(HttpUtility.HtmlEncode(item.Name));
                output.RenderEndTag();
            }
            else
            {
                output.Write(HttpUtility.HtmlEncode(item.Name));
            }
        }
    }

    public enum FileViewRenderMode
    {
        Icons,
        Details,
        Thumbnails
    }
}